/*
 * @Author: WeijianXu weijian.xu@unidt.com
 * @Date: 2023-05-19 11:16:07
 * @LastEditors: WeijianXu weijian.xu@unidt.com
 * @LastEditTime: 2024-05-30 11:27:26
 * @FilePath: \front-end-of-task-center\src\utils\formGenerator.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
/**
 * 设置默认的配置，避免配置时，丢失配置项
 *
 * @param {Object} config 当前表单的配置
 * @returns 合并后的表单配置
 */
export function setDefaultConfig(config) {
  return {
    label: "",
    labelWidth: null,
    showLabel: true,
    changeTag: true,
    tag: "",
    tagIcon: "",
    defaultValue: undefined,
    required: true,
    layout: "colFormItem",
    span: 24,
    document: "",
    // 正则校验规则
    regList: [],
    ...(config || {}),
  };
}

/**
 * 将服务端返回的 fields 字符串数组，解析成 JSON 数组
 * 如果指定了 variables 参数可对表单进行初始化
 *
 * @param fields JSON 字符串数组
 * @param variables Object 表单初始值
 * @returns {*[]} JSON 数组
 */
export function decodeFields(fields, variables) {
  const drawingList = (fields || []).map((json) => {
    let item = JSON.parse(json);
    item = {
      ...item,
      __config__: setDefaultConfig(item.__config__),
    };

    // 数据不存在，直接返回
    if (!variables) return item;

    const setDefault = (item, variables) => {
      const val = variables[item.__vModel__];
      if (typeof val !== "undefined") {
        item.__config__.defaultValue = val;
        // 处理上传文件
        if (item.__config__.tag == "el-upload") {
          if (Array.isArray(val)) {
            // defaultValue => file-list
            if (typeof val[0] === "string") {
              item.__config__.defaultValue = val.map((name) => {
                return {
                  name: name.lastIndexOf("/") > -1 ? name.slice(name.lastIndexOf("/") + 1) : name,
                  url: name,
                };
              }); 
            }
            // 其他形式，对象数组等
          } else if (typeof val === 'string') {
            item.__config__.defaultValue = val.split(',').map((name) => {
              return {
                name: name.lastIndexOf("/") > -1 ? name.slice(name.lastIndexOf("/") + 1) : name,
                url: name,
              };
            }); 
          }
        }
      }
      if (item.__config__.children && item.__config__.children.length) {
        item.__config__.children.forEach((child) => {
          setDefault(child, variables);
        });
      }
    };

    setDefault(item, variables);

    return item;
  });

  return drawingList;
}
